//使用require.context
// 1. 一个要搜索的目录，

// 2. 一个标记表示是否还要搜索其子目录，

// 3. 一个匹配文件的正则表达式。

let files = require.context("@/pages", true, /\.vue$/)

// console.log(files.keys())

//思考:一个路由配置是什么样的?

// 我们的目的就是通过这里编写的方法,生成路由配置 [{path:'xxx',component:()=>import('xx')}]

let repeatRoutes = files.keys().map(path => {
    // console.log(path)
    //1.需要把path: "./Home/Users/index.vue"这样的变成 /Home/Users,
    //使用正则过滤掉 /index.vue 或者过滤掉 .vue
    let regExp = /(\/index\.vue|\.vue)$/
    let com = files(path).default;
    path = path.replace(regExp, "").substring(1)
    // console.log(path)

    // 处理动态路由, _xx开头的
    // 正则匹配_xxx.vue文件
    let regExp2 = /\_([^\_]+)$/
    let match = path.match(regExp2);
    let param = null;
    if (match) {//如果匹配到
        param = match[1]//[_id,id,xxx]
        path = path.replace(regExp2, ":" + param)
        // console.log(path)
    }
    // path = path.toLowerCase()
    return {
        //路由重定向
        redirect: com.redirect ?? null,
        //具名路由
        name: com.name ?? path.substring(1).split("/").join('-'),
        meta: com.meta ?? {}, //路由元信息
        path: path.toLowerCase(),
        component: () => import("@/pages" + path)
    }
})

//console.log(repeatRoutes) //扁平化的路由配置

// 需要把repeatRoutes转换成"树形"数据

const convertTree = (repeatRoutes) => {
    //每条数据添加id,如果是嵌套路由,那么加上pid
    //pid 

    let treeRoues = [];//声明一个空数组用于存放树形的routes配置

    //时间复杂度O(n^2)
    //遍历repeatRoutes 对数据的id进行处理
    repeatRoutes.forEach(route => {

        //将path作为当前对象的id
        let pathArr = route.path.substring(1).split('/');
        //给每个对象生成id
        route.id = pathArr.join("-")
        // console.log(pathArr)
        //如果数组中的长度大于1,说明是子路由,需要添加pid
        if (pathArr.length > 1) {
            //pid就是parentid 父级id 数组中的最后一项去掉,就是父级id了
            let pidArr = [...pathArr] //浅拷贝;
            let pres = pidArr.pop();
            route.pid = pidArr.join('-')
        }
    })

    //把平铺数据,变成嵌套的树形数据
    repeatRoutes.forEach(route => {

        //爸爸在哪里,找数据的pid和数据id相等的项
        let parent = repeatRoutes.find(v => v.id === route.pid)
        // console.log(parent)
        if (parent) {
            //当前的route对象,找到父节点了
            //判断父节点有没有children属性,如果没有就创建
            if (!parent.children) {
                parent.children = []
            }
            // console.log(route.path)
            route.path = route.path.split('/').pop() //['','home','users','aa']
            parent.children.push(route)
        } else {
            treeRoues.push(route)
        }
    })

    return treeRoues
}

let result = convertTree(repeatRoutes)


console.log(result)

export default result